23

» WarCraft 3 / Локальные

Принятый ответ
Похожие вопросы:

ответ
Решил проблему следующим путем: при несовпадении данных в Memory, заставляем читера выделить специального скрытого в тумане войны юнита, а в другом триггере по событии выделения пишем, что GetTriggerPlayer() - МХшник, и только потом кикаем его.
quq_CCCP:
Для бана нужна работа с хост ботом
Ты неправильно понял. Если люди по Гарене играют, то они должны знать, что игрок отключается по неуважительной причине, чтобы сразу его забанить и потом не париться с ним. Бан-то локальный в Гарене, не то что на хост-боте.
ответ
вот тебе пример моего кода, если что, спрашивай:
void Damage_Text() {
unit u1     = GetEventDamageSource(),u2=GetTriggerUnit()
real x      = GetRandomReal(GetUnitX(u2)-30,GetUnitX(u2)+30)
real y      = GetRandomReal(GetUnitY(u2)-30,GetUnitY(u2)+30)
real z      = GetRandomInt(30,70)
string text = I2S(R2I(GetEventDamage()))//переводим урон в строку
texttag tt  = CreateTextTag()
  if GetEventDamage()>0 and (IsUnitInGroup(u1,Pdmg) or IsUnitInGroup(u1,Sdmg)) then
    SetTextTagVisibility(tt,false)//делаем тексттег невидимым
    if IsUnitInGroup(u1,Crit) then
      text=Yellow+"!|r "+text
    endif
    SetTextTagText(tt,text,0.023)
    if GetLocalPlayer()==GetOwningPlayer(u1) then//делаем тексттег видимым локальным игрокам
      SetTextTagColor(tt,255,255,255,230)
      SetTextTagVisibility(tt,true)
    elseif GetLocalPlayer()==GetOwningPlayer(u2) then
      SetTextTagColor(tt,200,0,0,230)
      SetTextTagVisibility(tt,true)
    endif
    SetTextTagPos(tt,x,y,z)
    SetTextTagPermanent(tt,false)
    SetTextTagVelocityBJ(tt,50,90)
    SetTextTagFadepoint(tt,0.5)
    SetTextTagLifespan(tt,1)
  endif
tt=null
u2=null
u1=null
ответ
Если память не изменяет
location

23

» WarCraft 3 / Способность

Похожие вопросы:

ответ
Когда юнит проучивает пассивку, добавляй в группу юнита, который выучил пассивку. Дальше все просто -
Юнит умирает
Киллинг юнит в нашей группе - да
Дайинг юнит не в команде владельца киллинг юнит.
Игрок - адд проперти - 500 золото (овнер оф киллинг юнит)
ответ
Сделай на основе берсерка и кидай сетку через созданного в позиции кастера даммика (невидимого юнита), даммика потом убираешь
ответ
XGM Bot:
Похожие вопросы:

ответ
ИИ написать, сами скиллы юзают тока крипы подконтрольные ИИ - к примеру нейтральновраждебные.
Так же можно юзать скилл - Сфера замедления, это орб эффект который срабатывая накладывает на цель атаки указанный в его настройках скилл, подойдет для карт типа Castle Fight.
ответ
ИИ чтоли не кастует? Сделай триггерный каст, Событие - юнит обнаружил цель в пределах досягаемости, проглотить не в кулдауне и цель неуязвимый враг, пойти и проглотить юнита...
ответ
Fireproof, попробуй в РО у юнита поменять "Графика - Анимация - обратный ход броска" и "Графика - Анимация - точка броска" на 0. Правда, это уберёт время каста для всех умений у этого юнита.
ответ
Ну тебе нужно чтобы был прямо таки бафф который можно рассеивать?
Для начала сделай способность, и баф на основе какой нибудь пустышки, подойдет ярость у некромантов, так же переодический триггер который раз в пол секунды проверяет всех юнитов в группе, есть ли у них бафф если юнит мертв или у него нет баффа, то у юнита удаляется способность на доп урон зданиям и сам унит удаляется из группы.
При касте твоим шаманов заклинания на цель, ты добавляешь цель заклинания в группу, которую и перебирает описанный выше триггер.
Надеюсь понятно?
ответ
datar1231, Именно поэтому говорят не делать 2 две способности от друга потому когда юнита приходит приказ на использование способности он использует твою нестандартную способность но основываясь на айди стандартной способности или делай на основе другой или незанаю подействует ли канал.


23

» WarCraft 3 / Проиграть анимацию

Похожие вопросы:

ответ
Иллюзии недо-юниты, они не могут использовать активки и предметы, лишь некоторые пассивки работают у иллюзий ( втом. числе и те что добавили триггерно).
Иллюзий найти плевое дело, есть проверка IsUnitIllision а так же событие Юнит призвал вызванное существо, ибо все иллюзии суммоны от конкретных способностей, создать иллюзию триггерно, без способности и юнита не получится...
Если вам нужны именно клоны героя (как арк варден в доте или мипо) то вам нужно создавать героя, обнулять у него все лишнее (вроде отображать как героя на карте команд, скрыть сообщение о гибели), так же необходимо триггерное слежение за такой иллюзией.
ответ
у Сларка это даммик, который двигается вместе с ним, и потом ремувится
у Баланара - лопается, когда день наступает... присмотришь получше
ответ
Astra:
Скорее всего в триггере стоит локальный игрок красного цвета. Скрин в студию
Во время инициализации карты в стартовой позиции игрока создается 1 висп.
Заменил триггер на другой, все заработало.
molot39:
Может проще будет после постройки здания сделать reset animation - на trigger unit
Увы, не работает.
Одним словом, я просто взял модель виспа, удалил у него все анимации, кроме stand, импортировал в карту, прописав путь к файлу, как к файлу модели оригинального виспа.
ответ
Отлавливать улучшение и делать триггерную анимацию. Способов достаточно много и без редактирования модели.
ответ
Без работы над памятью - никак. итемы не имеют подобных функций, доступных картоделу

23

» WarCraft 3 / незанятый рабочий

Похожие вопросы:

ответ
Никак.
Хотя если рыть очень глубоко с шрифтами, то возможно одна из категорий шрифта отвечает за эту циферку. Если повезёт - она при этом не будет отвечать ни за какие другие экранные шрифты в игре. Заменить шрифт в этой категории на малюсенький или бесцветный какой-нить - вот и удалили циферку. Как менять щрифт в карте отдельная статья.
ответ
Никого не слушай учись на картах близов, там есть все.
Смотри как устроены модели, эфекты и текстуры, особенно ланшафт, только не смотри как устроены здания как декорации(построение города), там фантазия их подвела.

23

» WarCraft 3 / Нужна моделька.

Похожие вопросы:

ответ
Начнём с того, что нужно было обратиться сюда: xgm.guru/p/wc3/needmodels#lastpost
А сделать я мог бы и сам, но сейчас не могу.
ответ
исправил ресурс
ответ
Ну, во - первых, есть вот этот пак: xgm.guru/p/wowmodels/winterdoodads
если не подходит, импортируй текстуру, которую я делал для одной карты и задай ей путь в менеджере импорта textures\Ruins_PlantLife.blp и перезагрузи карту, она заменит стандартные модельки кустов, грибов и лозы на "зимние". Текстуру прилагаю.
ответ
Вот в эту тему, пожалуйста: xgm.guru/p/wc3/needmodels
ответ
Steal nerves:
Модель стандартная?
раскрыть
раскрыть
не работает когда руну берешь? делал по этой статье xgm.guru/p/wc3/powerups
короче эффект не срабатывает из-за этого

23

» WarCraft 3 / Анимация меча

Похожие вопросы:

ответ
Если в редакторе моделей видно, что разные комплекты анимацый имеют характерные названия, например, все с луком заканчиваются словом bow , тогда команда Animation - add animation tag " bow " to unit.
Вот пример: пример
ответ
Тег - это добавление к названию анимации. Он пишется через пробел и триггерно добавить можно только определённые теги.
Ты пытаешься добавить полное имя анимации как тег.
Тебе следует переименовать анимацию attack 2 в мдлвизе например в attack first.
Тогда, при подбирании меча добавляй тег "first"
ответ
Можно:
  • Создать проект, пройти модерацию и добавить в него ресурс с вакансией — он появится в ленте ресурсов.
  • Написать в свой блог, запись будет в ленте блогов, соответственно.
  • Обратиться сюда (но этот ресурс, вроде, не особо активен.
Но в «Вопросы» писать не надо.
ответ
мне мои вопросы кажуться легко решаемыми
это только кажется
реально это тот ещё геморрой
попробуй сам реализовать пункт 4 (имхо самый простой из всего)
ответ
Покопаться можно в следующих пунктах
Бой Атака1-
приблизительно первые 2-7 пункты
анимация точки обратного хода
анимация точки повреждения
.....
время перезарядки
PS не факт что результат устроит

23

» WarCraft 3 / Блокиратор пути

Похожие вопросы:

ответ
сдается мне, что это не возможно без костылей, или же эту фичу юзали все картоделы :\
можно приподнимать декорации с помощью cntrl или shit + page down/page up, но это сугубо визуально, физически они будут все равно размещены внизу
на ум приходит только установка необходимой высоты всем проходящим по верхней стороне юнитам, но там будет другой геморрой (к примеру, если по мосту бежит несколько пехотинцев, враждебных друг другу, пехотинцы на верхней стороне не смогут быть атакованы, так как будут считаться "летающими")
ответ
Sergey103, для этого выбери один блокиратор, потом нажми на "Правка" и нажми "Выбрать все особые", потом просто удали их.
ответ
Steal nerves:
Все разобрался, я с обычной декорации сильно протупил, невнимательность.
Еще нашел другой способ, см. карту
ответ
Steal nerves:
Вот. Есть текст про описание движения как я понял (вот в чем разница между конным и пешим пока тоже не понял, интересует вот, что дает конный)
Эти паффинги, и типы движения взаимосвязаны. У некоторых есть баги, которыми можно воспользоваться. Например, чтобы летающие юниты игнорили ландшафт и летели прямо (вот на клифах может быть криво). На форуме дофига такого. Также можно сделать нелетающих летающими, дать сфинкс или превратиться в ворона (тоже баг) Ну и так далее
Как запретить перемещаться:
  1. Блокираторы пути. Есть баги короче xgm.guru/p/wc3/181384
  2. см. карту SetPathingRect (скачал с хайва)
ответ
Уменьшить скорость, и каждый маленький отрезок пути проверять проходимость пути. Если непроходим, то остановить способность.

23

» WarCraft 3 / Интерфейс

Похожие вопросы:

ответ
Заменим, только без внешнего софта новые элементы не добавить, но стандартыне редактируются в FDF
ответ
Нет
ответ
Viktor19:
кук пытается тебе втолковать, что неизвестный тип атаки - это технический тип урона, он используется для реализации стандартных спеллов и детектов дебаффа
Обычному юниту такой урон не поставить, как и тип защиты
ответ
Нет. Во вкладке интерфейс вы можете посмотреть все, что можете поменять

23

» WarCraft 3 / Канал

Принятый ответ
Похожие вопросы:

ответ
Altf40160:
Steal nerves:
Спасибо, но меня интересует как рас "событие - юнит применяет способность" как же заставить героя компьютера использовать скилл!?
ставишь айди приказа и в условиях проверяешь его, например если у канала стоит айди thunderbolt, то в триггерах это будет молот бурь
ответ
Как проверю функции - залью сюда
У меня с многоуровневым каналом работает
Area
function GetAbilityArea takes integer id, integer lvl returns real
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
return mI2R(RMem(k + 4*26*(lvl-1) + 4*6))
endfunction
function SetAbilityArea takes real NewValue, integer id, integer lvl returns nothing
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
call WMem(k + 4*26*(lvl-1) + 4*6, cleanInt(realToIndex(NewValue)))
endfunction
Range
function GetAbilityRange takes integer id, integer lvl returns real
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
return mI2R(RMem(k + 4*26*(lvl-1) + 4*7))
endfunction
function SetAbilityRange takes real NewValue, integer id, integer lvl returns nothing
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
call WMem(k + 4*26*(lvl-1) + 4*7, cleanInt(realToIndex(NewValue)))
endfunction
PS: thx lich
ответ
8gabriel8, ты не понял его просто
8gabriel8, у способности канал
есть параметр id спелов
в нем ты можешь выставить ид канала на пример будто воин применяет не канал а молот бурь
сейчас сделаю скрин
вот
то что в той строке написано пишешь в функцию как строку "channel" ну или другое ид если менял
Sergey105, кд спела узнать вроде нельзя без мемхака , но можно сделать триггер на каст спела

23

» WarCraft 3 / Канал

Похожие вопросы:

ответ
Altf40160:
Steal nerves:
Спасибо, но меня интересует как рас "событие - юнит применяет способность" как же заставить героя компьютера использовать скилл!?
ставишь айди приказа и в условиях проверяешь его, например если у канала стоит айди thunderbolt, то в триггерах это будет молот бурь
ответ
Как проверю функции - залью сюда
У меня с многоуровневым каналом работает
Area
function GetAbilityArea takes integer id, integer lvl returns real
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
return mI2R(RMem(k + 4*26*(lvl-1) + 4*6))
endfunction
function SetAbilityArea takes real NewValue, integer id, integer lvl returns nothing
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
call WMem(k + 4*26*(lvl-1) + 4*6, cleanInt(realToIndex(NewValue)))
endfunction
Range
function GetAbilityRange takes integer id, integer lvl returns real
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
return mI2R(RMem(k + 4*26*(lvl-1) + 4*7))
endfunction
function SetAbilityRange takes real NewValue, integer id, integer lvl returns nothing
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
call WMem(k + 4*26*(lvl-1) + 4*7, cleanInt(realToIndex(NewValue)))
endfunction
PS: thx lich
ответ
8gabriel8, ты не понял его просто
8gabriel8, у способности канал
есть параметр id спелов
в нем ты можешь выставить ид канала на пример будто воин применяет не канал а молот бурь
сейчас сделаю скрин
вот
то что в той строке написано пишешь в функцию как строку "channel" ну или другое ид если менял
Sergey105, кд спела узнать вроде нельзя без мемхака , но можно сделать триггер на каст спела

23

» WarCraft 3 / Затемнение

Похожие вопросы:

ответ
Спецэффекты - advanced filter - белая маска, начиная со цвета 0 0 0 и 50% прозрачности и заканчивая таким же.
ответ
Так?
ответ
TripleKor:
Модель света и триггер способности:
Проверку на уровень можешь убрать и крепить ещё один источник просто с изучением способности.
источник света не работает
ответ
есть триггер Спецэффекты - Fade Filter
ответ
XGM Bot:
Похожие вопросы:

ответ
Спецэффекты - advanced filter - белая маска, начиная со цвета 0 0 0 и 50% прозрачности и заканчивая таким же.
ответ
есть триггер Спецэффекты - Fade Filter
ответ
Зайти в кампанию и посмотреть. Не?


23

» WarCraft 3 / Стены

Похожие вопросы:

ответ
Исправляется путем вставки иной точки вместо Point1, к примеру на TempPoint, в триггере, что вызывается интервалом.
Вот исправленный вариант твоей ужасосистемы... и как писал тут дадька nvc123:
вот только эта система генерирует точки кучами
На что ты должен обратить внимание в первую очередь!
И забыл написать, что так же последняя пуля тоже не учитывается. Лечится прямыми руками и внимательным чтением ресурсов данного сайта. Ибо тем по этому поводу тут полно...
ответ
~16GB:
Создаёт стену из магического льда, которая отталкивает противников от себя.
function IsUnitDeadBX takes unit u returns boolean
return GetUnitTypeId(u) == 0 or IsUnitType(u, UNIT_TYPE_DEAD)
endfunction

function IsTarget takes unit u,unit d returns boolean
return not IsUnitType(u,UNIT_TYPE_ANCIENT) and not IsUnitDeadBX(u)  and not IsUnitType(u, UNIT_TYPE_STRUCTURE) and not IsUnitType(u, UNIT_TYPE_MAGIC_IMMUNE) and (IsUnitEnemy(u, GetOwningPlayer(d)) or GetOwningPlayer(u) == Player(15))
endfunction

function SQ takes real xa, real ya, real xb, real yb returns real
return SquareRoot((xa-xb)*(xa-xb)+(ya-yb)*(ya-yb))
endfunction

function SafeX takes real pxx returns real
local real lfr=GetRectMinX(bj_mapInitialPlayableArea)+50
if(pxx<lfr)then
return lfr
endif
set lfr=GetRectMaxX(bj_mapInitialPlayableArea)-50
if(pxx>lfr)then
return lfr
endif
return pxx
endfunction

function SafeY takes real pyy returns real
local real lfr=GetRectMinY(bj_mapInitialPlayableArea)+50
if(pyy<lfr)then
return lfr
endif
set lfr=GetRectMaxY(bj_mapInitialPlayableArea)-50
if(pyy>lfr)then
return lfr
endif
return pyy
endfunction

function UBU takes unit u, unit d, unit c , real w returns boolean
local real x = GetUnitX(u)
local real y = GetUnitY(u)
local real r1 = 57.295827*Atan2(y-GetUnitY(d),x-GetUnitX(d))
local real r2 = 57.295827*Atan2(y-GetUnitY(c),x-GetUnitX(c))
set r2 = r2 -180
if r1 < 0.00 then
set r1 = r1 + 360
endif
if r2 < 0.00 then
set r2 = r2 + 360
endif
if r1 - r2  <= w and r1 - r2  >= -(w) then
return true
else
return false
endif
endfunction


function IceWallCon takes nothing returns boolean
return GetSpellAbilityId() == 'A0KP'
endfunction

function IceWallCreate takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer id = GetHandleId(t)
local unit c = LoadUnitHandle(udg_AssassinHash,id,0)
local real r = LoadReal(udg_AssassinHash,id,3)
local integer i = LoadInteger(udg_AssassinHash,id,4)
local integer j = LoadInteger(udg_AssassinHash,id,5)
local real x = LoadReal(udg_AssassinHash,id,StringHash("X"))
local real y = LoadReal(udg_AssassinHash,id,StringHash("Y"))
local real a = 0.
local real b = 0.
local boolean e = LoadBoolean(udg_AssassinHash,id,6)
local boolean f = LoadBoolean(udg_AssassinHash,id,7)
local boolean k = LoadBoolean(udg_AssassinHash,id,8)
local integer n = LoadInteger(udg_AssassinHash,id,25)
local real X2 = LoadReal(udg_AssassinHash,id,StringHash("X2"))
local real Y2 = LoadReal(udg_AssassinHash,id,StringHash("Y2"))
local real X3 = LoadReal(udg_AssassinHash,id,StringHash("X3"))
local real Y3 = LoadReal(udg_AssassinHash,id,StringHash("Y3"))
local integer h = 0
local group g = LoadGroupHandle(udg_AssassinHash,id,2)
local unit u
local unit d
local unit d1
if e == false then
set i = i+1
set j = j+1
if i < 7 then
set a = SafeX(x+(80.*i)*Cos(r))
set b = SafeY(y+(80.*i)*Sin(r))
set d = CreateUnit(GetOwningPlayer(c),'e00V',a,b,0)
call UnitAddAbility(d,'Arav')
call UnitRemoveAbility(d,'Arav')
call SetUnitFlyHeight(d,150,0)
call DestroyEffect(AddSpecialEffect("FrozenOrbBall.mdx",a,b))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",a,b))
call SaveUnitHandle(udg_AssassinHash,id,StringHash("IWU1"+I2S(i)),d)
set a = SafeX(x-(80.*j)*Cos(r))
set b = SafeY(y-(80.*j)*Sin(r))
set d = CreateUnit(GetOwningPlayer(c),'e00V',a,b,0)
call UnitAddAbility(d,'Arav')
call UnitRemoveAbility(d,'Arav')
call SetUnitFlyHeight(d,150,0)
call DestroyEffect(AddSpecialEffect("FrozenOrbBall.mdx",a,b))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",a,b))
call SaveUnitHandle(udg_AssassinHash,id,StringHash("IWU2"+I2S(j)),d)
call SaveInteger(udg_AssassinHash,id,4,i)
call SaveInteger(udg_AssassinHash,id,5,j)
else
call SaveBoolean(udg_AssassinHash,id,6,true)
endif
else
if f == false then
call SaveInteger(udg_AssassinHash,id,4,0)
call SaveReal(udg_AssassinHash,id,3,r-1.566)
call TimerStart(t,.025,true,function IceWallCreate)
call SaveBoolean(udg_AssassinHash,id,7,true)
else
set i = i+1
if i < 201 then
call SaveInteger(udg_AssassinHash,id,4,i)
set d = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU16"))
set d1 = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU26"))
call GroupClear(udg_G)
call GroupEnumUnitsInRange(udg_G,x,y,1040,null)
loop
set u = FirstOfGroup(udg_G)
if IsTarget(u,c) and UBU(u,d,d1,20.) and IsUnitInGroup(u,g) == false then
call GroupAddUnit(g,u)
if GetUnitAbilityLevel(c,'B009') > 0 then
call UnitDamageTarget(c,u,150.+80.*GetUnitAbilityLevel(c,'A0KP'),true,true,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
else
call UnitDamageTarget(c,u,75.+40.*GetUnitAbilityLevel(c,'A0KP'),true,true,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
set n = n+1
call SaveInteger(udg_AssassinHash,id,25,n)
call SaveInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(n)),15)
if SQ(X3,Y3,GetUnitX(u),GetUnitY(u)) > SQ(X2,Y2,GetUnitX(u),GetUnitY(u)) then
call SaveReal(udg_AssassinHash,id,StringHash("IWR"+I2S(n)),LoadReal(udg_AssassinHash,id,20))
else
call SaveReal(udg_AssassinHash,id,StringHash("IWR"+I2S(n)),LoadReal(udg_AssassinHash,id,21))
endif
call SaveUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(n)),u)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\FrostArrows\\NagaColdArrowMissile.mdl",u,"chest"))
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",u,"chest"))
endif
call GroupRemoveUnit(udg_G,u)
exitwhen u == null
endloop
set i = 1
if n > 0 then
loop
exitwhen i > n
set h = LoadInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(i)))-1
set r = LoadReal(udg_AssassinHash,id,StringHash("IWR"+I2S(i)))
set u = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(i)))
call SaveInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(i)),h)
call SetUnitPathing(u,false)
call SetUnitX(u,SafeX(GetUnitX(u)+15.*Cos(r)))
call SetUnitY(u,SafeY(GetUnitY(u)+15.*Sin(r)))
call IssueImmediateOrder(u,"stop")
if ModuloInteger(h,3) == 0 then
call DestroyEffect(AddSpecialEffectTarget("FrozenOrbBall.mdx",u,"chest"))
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",u,"chest"))
endif
set i = i + 1
endloop
set i = 1
loop
exitwhen i > n
set h = LoadInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(i)))
set u = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(i)))
if h <= 0 or IsUnitDeadBX(u) or not IsTarget(u,c) then
set j = i
call GroupRemoveUnit(g,u)
call SetUnitPathing(u,true)
loop
exitwhen j > n
call SaveReal(udg_AssassinHash,id,StringHash("IWR"+I2S(j)),LoadReal(udg_AssassinHash,id,StringHash("IWR"+I2S(j+1))))
call SaveInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(j)),LoadInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(j+1))))
call SaveUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(j)),LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(j+1))))
set j = j + 1
endloop
set n = n-1
call SaveInteger(udg_AssassinHash,id,25,n)
endif
set i = i + 1
endloop
endif
else
set i = 1
if n > 0 then
loop
exitwhen i > n
set h = LoadInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(i)))-1
set r = LoadReal(udg_AssassinHash,id,StringHash("IWR"+I2S(i)))
set u = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(i)))
call SaveInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(i)),h)
call SetUnitPathing(u,false)
call SetUnitX(u,SafeX(GetUnitX(u)+15.*Cos(r)))
call SetUnitY(u,SafeY(GetUnitY(u)+15.*Sin(r)))
call IssueImmediateOrder(u,"stop")
if ModuloInteger(h,3) == 0 then
call DestroyEffect(AddSpecialEffectTarget("FrozenOrbBall.mdx",u,"chest"))
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",u,"chest"))
endif
set i = i + 1
endloop
set i = 1
loop
exitwhen i > n
set h = LoadInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(i)))
set u = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(i)))
if h <= 0 or IsUnitDeadBX(u) then
set j = i
call GroupRemoveUnit(g,u)
call SetUnitPathing(u,true)
loop
exitwhen j > n
call SaveReal(udg_AssassinHash,id,StringHash("IWR"+I2S(j)),LoadReal(udg_AssassinHash,id,StringHash("IWR"+I2S(j+1))))
call SaveInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(j)),LoadInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(j+1))))
call SaveUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(j)),LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(j+1))))
set j = j + 1
endloop
set n = n-1
call SaveInteger(udg_AssassinHash,id,25,n)
endif
set i = i + 1
endloop
endif
if k == false then
set j = 1
loop
exitwhen j > 6
set d = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU1"+I2S(j)))
call DestroyEffect(AddSpecialEffect("FrozenOrbBall.mdx",GetUnitX(d),GetUnitY(d)))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",GetUnitX(d),GetUnitY(d)))
call KillUnit(d)
set j = j + 1
endloop
set j = 1
loop
exitwhen j > 6
set d = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU2"+I2S(j)))
call DestroyEffect(AddSpecialEffect("FrozenOrbBall.mdx",GetUnitX(d),GetUnitY(d)))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",GetUnitX(d),GetUnitY(d)))
call KillUnit(d)
set j = j + 1
endloop
set d = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"))
call KillUnit(d)
call DestroyEffect(AddSpecialEffect("FrozenOrbBall.mdx",GetUnitX(d),GetUnitY(d)))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",GetUnitX(d),GetUnitY(d)))
call SaveBoolean(udg_AssassinHash,id,8,true)
endif
if k and n <= 0 then
call DestroyGroup(g)
call DestroyTimer(t)
call FlushChildHashtable(udg_AssassinHash,id)
endif
endif
endif
endif
set t = null
set c = null
set d = null
set d1 = null
set g = null
set u = null
endfunction

function IceWall takes nothing returns nothing
local unit c =  GetSpellAbilityUnit()
local real a = GetUnitX(c)
local real b = GetUnitY(c)
local real x = SafeX(GetSpellTargetX())
local real y = SafeY(GetSpellTargetY())
local real r = Atan2(y-b,x-a)+1.566
local timer t = CreateTimer()
local real dist = SQ(a,b,x,y)*2.
local integer id = GetHandleId(t)
local unit d
set d = CreateUnit(GetOwningPlayer(c),'e00V',x,y,0)
call UnitAddAbility(d,'Arav')
call UnitRemoveAbility(d,'Arav')
call SetUnitFlyHeight(d,150,0)
call SaveUnitHandle(udg_AssassinHash,id,StringHash("IWU"),d)
call DestroyEffect(AddSpecialEffect("FrozenOrbBall.mdx",x,y))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",x,y))
call SaveUnitHandle(udg_AssassinHash,id,0,c)
call SaveReal(udg_AssassinHash,id,3,r)
set r = Atan2(y-b,x-a)
call SaveReal(udg_AssassinHash,id,20,r)
call SaveReal(udg_AssassinHash,id,21,Atan2(b-y,a-x))
call SaveReal(udg_AssassinHash,id,StringHash("X2"),a+dist*Cos(r))
call SaveReal(udg_AssassinHash,id,StringHash("Y2"),b+dist*Sin(r))
call SaveReal(udg_AssassinHash,id,StringHash("X3"),a)
call SaveReal(udg_AssassinHash,id,StringHash("Y3"),b)
call SaveGroupHandle(udg_AssassinHash,id,2,CreateGroup())
call SaveReal(udg_AssassinHash,id,StringHash("X"),x)
call SaveReal(udg_AssassinHash,id,StringHash("Y"),y)
call TimerStart(t,.025,true,function IceWallCreate)
set t = null
set c = null
set d = null
endfunction
ответ
Грубый пример:
Событие - постройка завершена
Действие: Если тип юнита (построенное здание) = стена,
то установить переменую-точку = позиция (построенного здания),
удалить (построенное здание)
создать декорацию типа "Стена-декорация" в точке-переменной
удалить точку

Пишу с работы, редактора под рукой нет. Прошу за ошибки и неточности простить))
ответ
RedLegion:
dave_wwid:
Есть статья в базе
Basile2:
Текстуру перерисуй и будет счастье
Не силён в таких делах. Хотелось просто и без гемора найти модель. Видел на картах есть такие, но увы они запротекчены.
Открой прогой mpq editor

23

» WarCraft 3 / Не получать опыта за героя

Похожие вопросы:

ответ
Так?
ответ
закрыт по таймауту
ответ
Лимит операций, обычно это беда настигает заядлых гуишников.
На jass обычно нету таких проблем.
Создайте таймер с периодом .00 сек и запускайте им функции инициализации триггеров.
функция типа InitTrig_Имя триггера - это функция инициализации триггера, она вызывается из функции InitCustomTriggers, но если этих вызовов очень много то функция упирается в лимит операций и поток завершается так и не создав все триггеры.

23

» WarCraft 3 / Опыт

Похожие вопросы:

ответ
При убийстве дракона поставить проверку условия, что убивающий юнит принадлежит красному игроку.
А в действиях - 2 варианта.
Вариант 1. Триггерно уменьшить опыт убивающему герою на количество, равное данному за убийство.
Но если уровень повысится - точно не знаю, сработает ли.
Вариант 2. Убрать в РО опыт за убийство и добавлять его убивающему герою триггерно.
Лучше использовать второй.
WarSC:
Легко
Так написал бы ответ, раз легко )
Человек за помощью обратился всё же.
ответ
Порылся в игровых константах (Вкладка "Дополнительно"). Если изменить указанный пункт, можно задать часть получаемого опыта при отрыве уровня героя. Если поставить все числа 100, то всегда будет даваться полный объем опыта. Можно поставить последнее число 50, тогда при большом отрыве уровней, будет даваться только половина опыта. Как-то так. Могу ошибаться
ответ
А исправить эти его "тупые" действия никак нельзя?
переписать ai скрипты
он хранится в mpq архивах в файлах с расширением .ai
например аи для людей хранится в файле human.ai
ответ
игровые константы - опыт: общее распределение - поменяй на "нет"....

23

» WarCraft 3 / Предметы

Похожие вопросы:

ответ
Так ты же выключаешь триггер на 18 секунд вот он и не срабатывает.
Поставь условие, что герыч не имеет абилки-пустышки, если не имеет - дать её и через 18 сек забрать и пустить молнию.
Правда я не уверен насчёт того, отловится ли attacking unit через 18 сек вейта, проверь...
Вообще, если устраивает орбом - то даёшь "сферу молний" с эффектом "цепь молний", у которой 18 сек перезарядка(у цепи не у сферы)
ответ
Melissa:
а какая способность у этого предмета?
Разобрался с этой проблемой.
ответ
~8gabriel8:
GingerAlice, перейти на вкладку Способности, открыть Особые->Предметы, там найти "Дух-целитель (предмет)" и поставить своё время.
ответ
~8gabriel8:
У меня был вопрос с проигрыванием анимаций моделью предмета, но ответили, что нельзя предметам анимации проиграть. Можно так сделать (это то, что имел ввиду Diaboliko, просто немного подробнее расписано):
  • Берёшь модель с нужным трупом;
  • Открываешь её в mdlvis или w3me;
  • Если в mdlvis, то заходишь в редактор анимаций (F3) и оставляешь только анимацию с трупом;
  • Если в w3me, то Windows->Sequence Manager и опять же удаляешь все анимации кроме трупа;
  • Переименовываешь на всякий случай анимацию с трупом в Stand;
  • Импортируешь модель в карту и назначаешь её предмету;
  • У такой модели останется куча ненужной информации, например, текстуры от живой модели, но может быть сам сможешь это удалить.

23

» WarCraft 3 / Unit атакует?

Похожие вопросы:

ответ
Ох уж эти отловы урона
ответ
событие - юнит получает урон
условие - юнит получивший урон имеет баф (баф стрелы)
Pippetz, лучше не яд а ледяные стрелы
ответ
было бы круто если бы ты их вспомнил а то я уже собираюсь весь ии переписать
ответ
Вместо
function InitTrig_CreepSpell takes nothing returns nothing
    set gg_trg_CreepSpell = CreateTrigger()
    call TriggerRegisterPlayerUnitEvent(gg_trg_CreepSpell, Player(1), EVENT_PLAYER_UNIT_SPELL_EFFECT, function CreepSpellFilter) 
    call TriggerAddAction(gg_trg_CreepSpell, function CreepSpellActivation)
endfunction
сделай так:
function InitTrig_CreepSpell takes nothing returns nothing
    set gg_trg_CreepSpell = CreateTrigger()
    call TriggerRegisterPlayerUnitEvent(gg_trg_CreepSpell, Player(1), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) //function CreepSpellFilter
    call TriggerAddCondition(gg_trg_CreepSpell, Condition(function CreepSpellFilter))
    call TriggerAddAction(gg_trg_CreepSpell, function CreepSpellActivation)
endfunction
и вот здесь:
if IsUnitEnemy(GetFilterUnit(), Player(10)) then
        set Dummy = CreateUnit(Player(1), 'e004', CasterX, CasterY, bj_RADTODEG*Atan2(TargetY - CasterY, TargetX - CasterX))
		call IssuePointOrder(Dummy, "attackground", TargetX, TargetY)
        call UnitApplyTimedLife(Dummy, 'BTLF', 3)
        set Dummy = null
    endif
поменяй местами IssuePointOrder и UnitApplyTimedLife, чтобы было вот так:
    if IsUnitEnemy(GetFilterUnit(), Player(10)) then
        set Dummy = CreateUnit(Player(1), 'e004', CasterX, CasterY, bj_RADTODEG*Atan2(TargetY - CasterY, TargetX - CasterX))
        call UnitApplyTimedLife(Dummy, 'BTLF', 3)
        call IssuePointOrder(Dummy, "attackground", TargetX, TargetY)
        set Dummy = null
    endif

23

» WarCraft 3 / Авто-каст

Похожие вопросы:

ответ
Ну, это просто - берёшь и вспоминаешь все необычные карты. Комуниздишь. Профит.
Для инкома можно сделать зависимость от типа ландшафта. Например, чтобы добывали только на мелководье. Или если возле этого здания есть деревья. Или увеличивать инком в зависимости от кол-ва деревьев рядом. Соответственно, ддеревья можно заменить на другие здания, шахты с золотом и вообще на что угодно. Запилить риск и смотреть кол-во войск возле города.
Можно дать расе ферму, на которой игрок будет производить овец/поросят/людишек и забивать их на мясо. Ну или просто быть источником инкома, который бродит где попало.
Можно запилить фракцию варваров, которые будут добывать золото только убивая и ломая здания.
Можно сделать так, чтобы получаемый героем опыт конвертился в золото. И при покупках/постройках тратился.
ответ
Это неважно 2 или 8895465, все что вам нужно это отловить урон в 0.0 ед. от лица того кто кастует стрелы или врубил автокаст и атакует, а так же проверить на бафф стрел, если бафф стрел есть и юнит получил 0.00 ед. урона то в него прилетала стрела от автокаста...
ответ
Заняться все равно было нечем, поэтому я сделал все за тебя
ответ
на основе эксгумация труповозок можно сделать пасивки с колдаунами
вот наработка
ответ
Хоспаде. Вынеси свою лучницу в отдельную карту. У тебя же чёрт ногу сломит.

Не знаю, у меня автокаст нормально перезаряжается. Возможно, дело в основе. Попробуй дать не "Ледяные", а "Огненные стрелы".
Вот. Забыл прикрепить.
А может быть, дело в том, что твоя лучница - "Здание". Честное слово, это три самые замороченные способности у близзард: "Огненные", "Отравленные" и "Ледяные" стрелы. На первый взгляд они одинаковые, но стоит присмотреться... Ух!

23

» WarCraft 3 / музыка на экране кампании

Похожие вопросы:

ответ
Никак. Это должна быть не музыка, а фоновые звуки.
ответ
~8gabriel8:
Вряд ли этот вопрос решится, можно его просто удалить, а не закрывать?

23

» WarCraft 3 / Меню паузы

Похожие вопросы:

ответ
А приказ остановиться не пробовали?
ответ
Создать список "станящих" баффов, при потере баффа из этого списка проверять есть у юнита еще какой либо бафф из списка.
Если нет - снимать паузу, если есть - ничего не трогать.
ответ
Отвечу вместо бота: xgm.guru/p/wc3/multiboard3
ответ
Steal nerves:
переходишь на jass? немного посмотри примеры и почитай статьи. набери в поиск таймеры + хэш-таблица и прочее
раскрыть
На триггерах это будет глупо и неудобно. Нужно создать или хотя бы иметь существующий таймер, потом запустить в определенный момент. Но для начала нужно сохранить данные, с которыми будешь взаимодействовать (например, юнит). К примеру дали пассивный скилл, через 5 минут удалил.
есть несколько способов, это запускать таймер. А другим триггером отлавливать с помощью события завершения времени таймера. Или вызывать напрямую функцию.
используется нативка
native TimerStart takes timer whichTimer, real timeout, boolean periodic, code handlerFunc returns nothing
или это. здесь функцию не вызывают, а просто запускают таймер. Завершение таймера отлавливают с помощью другого триггера. Очень неудобно
function StartTimerBJ takes timer t, boolean periodic, real timeout returns timer
    set bj_lastStartedTimer = t
    call TimerStart(t, timeout, periodic, null)
    return bj_lastStartedTimer
endfunction
ответ
конвертнуть путь иконки в переменную типа строчки и уже в таблице использовать переменную как путь

23

» WarCraft 3 / Что делать с этим багом?

Похожие вопросы:

ответ
Ну, если дать неуязвимому даммику, то у них тоже приказ сбивается?
ответ
Проблема решена. Обнаружилась довольно неожиданно - заметил, что во время крита герой не разбивал лицо сам себе, начал искать модификаторы атаки - у героя было 3 пустышки с нулевыми значениями на основе "ракет". При всех пустых значениях вылетает невидимая ракета по самому себе.
ответ
Советую проверять бекапы один за другим, и в том, в котором впервые возникает такая проблема, и искать ошибку, она наверняка где-то в изменениях относительно хронологически предыдущей версии.
ответ
Sasha166:
Да там есть спец. эф в заклинаниях "похитить" называется.
Должна сфера появится, типа душа.
В карте, что я прикреплял сюда она есть, и как-то тоби сделал, что их создавалось не по 20 штук, а только одна.
Ну и не только атака должна отниматься, но у хп реген.
Ну а так-то пример хороший, и понятно что делать, в том случае, если захочу делать больше уровней для способности.
Пере заливаю.
molot39:
Что нужно для ГУИ:
  1. Способность - 3 шт.
  • для героя (любая пустая аура, или же можно пасивку)
  • 2 способности для атрибутов, для атаки 20 уровней (20 душ) и для регена 30 уровней (30 душ)
  1. Если у нас аура, то заклинание с иконкой и описанием
  1. Сам герой со одной способностью (аура или пасива)
  1. Триггер - 1 шт.
Скрин
Где стоит условие (убийца) имеет баф, можно поставить уровень убийцы больше или равно 1, если у нас пасива.
Что получается, если мы убиваем первого героя имея способность, получаем способность и уровень становится 1, последующие убийства увеличивают уровень, через условие не даем повышать ненужные уровни, убивают нас, способности теряем.
Так же можно добавить эффекты, через дамми или же что нить ещё, и когда нас убивают наносим урон всем через способность "взрыв", который так же повышается уровнями (душами) как и остальные. Взрыв можно сделать как через дамми, так и дать закрытую способность самому герою и активировать взрыв при смерти.
Не каких фиксаций, гемора и утечек.
Болванка прилагается.
Автору совет, или же урок:
Смотри как делают другие, и ломай голову как это можно сделать по своему уникально, возможно проще и оптимальнее.
Спасибо всем.
Или же в перекрепленных файлах.
ответ
Свойства карты - Параметры - Нестандартное звуковое окружение. Там посмотри.

23

» WarCraft 3 / Утечки

Похожие вопросы:

ответ
Какой ужас
Делай вот так.
бронепоезд
создать.
направить на 128 точек наверх(90)
сделать неперманентным
текст удалится через 3 секунды
текст затухнет до 100% прозрачности через 3 секунды
Вот чёрт. не успел приплюснуть к посту.
ответ
о чем нужно заботиться:
ты создаешь объекты, к которым больше никогда не обратишься. например, локацию, или триггер, который один раз отработал и больше не нужен. представь, что это юнит, который стоит за картой. да, он в игре не участвует, но нахера он стоит?
утечка и есть такой юнит. Не страшно, если оно есть. не страшно, если у тебя счетчик хендлов зашкаливает. наличие утечек не мешает уничтожить объект - просто его хендл не вернется в общий стек. Позаботься, что ты уничтожаешь все ненужные объекты, а утечки можешь особо и не считать.

23

» WarCraft 3 / Утечки группы.

Похожие вопросы:

ответ
Патиссончик, про центр области не заметил
точка каждый раз создаётся заново и это утечка
Патиссончик, есть прога на сайте для записи логов
так же есть дебаг через прелоад на сайте
вот счётчик утечек
ответ
тебе для начала надо научится пользоваться группами
прочти статьи ибо ты написал бред в вопросе
ответ
Вот как должен выглядеть полностью правильный триггер без утечек, единственная утечка создастся только при первом использовании, это я так понял переменная группы, ее обнулять нельзя, иначе скил будет работать только раз.
ответ
quq_CCCP:
Спасибо, понял что надо создавать форс единожды, чтобы утечек не было
Мдаа уж, оказывается все дело в том, что забыл поставить исходные позиции другим игрокам, хорошо хоть проверить догадался, засиделся за редактором
ответ
А зачем, мб альтернатива гуи? Ну она есть, jass.
Если использовать группы нормально, а не как нам предлагает гуи, не будет ни утечек, ни проблем.

23

» WarCraft 3 / Столкновения юнитов

Похожие вопросы:

ответ
Ledon, взять нативки и написать используя левую и правую руки
ответ
Steal nerves:
K0META, ты прав. проверил. короче еще с этим нужно карту пути скопировать у портала и вставить в поле вашего здания.
через триггеры это раздел "Боевая единица" - Set Unit Collosion Off
ответ
способ 1
вешать структуру на таймер с помощью эксплойта (для тех кто не знает структура это число) а потом этим таймером вызывать нужную функцию спустя 0 секунд
плюсы:
простота
минусы:
требует добавлять иф на каждую новую функцию
второй способ
тоже самое что и 1 только на таймер вешается вдобавок название функции и таймер вызывает её экзекутом
вот моя библиотека по 2 способу и карта с примером
в библиотеке в самом верху есть небольшой док по 3 функциям
ответ
самый простой способ, будет падать без ускорения со скоростью 600
в функцию которая меняет высоту юнита передается два числа, первое высота а второе скорость
здесь я сперва поднял грифона на высоту 1000 мгновенно (скорость 0), а затем роняю его на высоту 0 со скоростью 600
ответ
виндволк в помошь